from django.core.management.base import BaseCommand
from battles.node_server_manager import get_node_server_manager


class Command(BaseCommand):
    help = '清理端口冲突和残留的Node.js战斗服务器进程'

    def add_arguments(self, parser):
        parser.add_argument(
            '--force',
            action='store_true',
            help='强制清理所有相关进程',
        )

    def handle(self, *args, **options):
        self.stdout.write('开始清理端口冲突和残留进程...')
        
        manager = get_node_server_manager()
        
        try:
            # 清理不健康的服务器
            unhealthy_count = manager.cleanup_unhealthy_servers()
            self.stdout.write(f'清理了 {unhealthy_count} 个不健康的服务器')
            
            # 清理端口进程
            port_count = manager.cleanup_port_processes()
            self.stdout.write(f'清理了 {port_count} 个占用端口的进程')
            
            # 停止所有服务器
            if options['force']:
                success = manager.stop_all_servers()
                if success:
                    self.stdout.write('成功停止所有服务器')
                else:
                    self.stdout.write('停止服务器时遇到一些问题')
            
            # 显示统计信息
            stats = manager.get_stats()
            self.stdout.write('\n当前状态:')
            self.stdout.write(f'  运行中服务器: {stats["running_servers"]}')
            self.stdout.write(f'  已停止服务器: {stats["stopped_servers"]}')
            self.stdout.write(f'  错误服务器: {stats["error_servers"]}')
            self.stdout.write(f'  已使用端口: {stats["used_ports"]}')
            self.stdout.write(f'  可用端口: {stats["available_ports"]}')
            self.stdout.write(f'  总服务器数: {stats["total_servers"]}')
            
            self.stdout.write(self.style.SUCCESS('端口清理完成'))
            
        except Exception as e:
            self.stdout.write(self.style.ERROR(f'清理过程中出现错误: {e}'))